/*  11/10/03 15:20   */

#include<stdio.h>
#include<stdlib.h>
#define QSIZE 5

struct queue
{
 int item[QSIZE];
 int front,rear,count;
};

void enqueue(struct queue *pq,int n)
{
 int i=pq->front+1,j=pq->rear-1,k=pq->rear-1;

 if(pq->count==(QSIZE-1))
   {
    printf("\nqueue is full\n");
   }
 else
   {
    if(pq->count==-1)
      {
       pq->item[pq->rear]=n;
       pq->rear++;
       pq->count++;
      }
    else
      {
       if(n<pq->item[pq->front])
         {

          for(k=(pq->rear-1);k>=pq->front;k--)
             {
              pq->item[k+1]=pq->item[k];
             }
          pq->item[pq->front]=n;
          pq->rear++;
          pq->count++;
         }
       else
         {
          if(n>pq->item[pq->rear-1])
            {
             pq->item[pq->rear]=n;
             pq->rear++;
             pq->count++;
            }
          else
            {
             printf("\nhello1\n");
             i=pq->front+1;
             for(i=(pq->front+1);i<=(pq->rear-1);i++)
                {
                 printf("\nhello2\n");
                 if(i==QSIZE)
                   {
                    i=0;
                   }
                 if(n<pq->item[i])
                   {

                    for(j=(pq->rear-1);j>=i;j--)
                       {
                        pq->item[j+1]=pq->item[j];
                       }
                    pq->item[i]=n;
                    pq->rear++;
                    pq->count++;
                    printf("\nrohit\n");
                    return;
                   }
                 }
             }
         }

     }
   }
}


void dequeue(struct queue *pq)
{
 int i;
 if(pq->count==-1)
   {
    printf("\nqueue is empty\n");
   }
 else
   {
    printf("\ntesting...\n");
    i=pq->front;
    if(pq->rear==0)
      {
       pq->rear=QSIZE;
      }
    for(i=pq->front;i<(pq->rear-1);i++)
       {
        pq->item[i]=pq->item[i+1];
       }
    pq->rear--;
    pq->count--;
   printf("\nsucessfull\n");
   }
}



void display(struct queue *pq)
{
 int i=0,j=pq->front;
 if(pq->count==-1)
   {
    printf("\nqueue is empty\n");
   }
 else
   {
    j=pq->front;
    for(i=0;i<=pq->count;i++)
       {
        printf("\n%d",pq->item[j]);
        j++;
        if(j==QSIZE)
          {
           j=0;
          }
       }
   }
}

void main()
{
 struct queue q;
 int ch,n;
 q.front=0;
 q.rear=0;
 q.count=-1;

 do
  {
   printf("\nenter choice:\n1.enqueue\n2.dequeue\n3.display\n4.exit\n");
   scanf("%d",&ch);
   switch(ch)
      {
       case 1: printf("\nenter integar to enqueue:");
               scanf("%d",&n);
               enqueue(&q,n);
               if(q.rear==QSIZE)
                 {
                  q.rear=0;
                 }
               break;

       case 2: dequeue(&q);
               break;

       case 3: display(&q);
               break;
      }
  }
 while(ch!=4);
}


